/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pooproj.regra;

import java.util.ArrayList;
import pooproj.basica.Categoria;
import pooproj.erro.AllgemeinException;
import pooproj.erro.ConexaoException;
import pooproj.erro.ConsultaException;
import pooproj.repositorio.RepositorioCategoria;
import pooproj.repositorio.RepositorioCategoriaImpl;

/**
 *
 * @author Daniella
 */
public class RNCategoria {
    
    private RepositorioCategoria rep;
    
    public RNCategoria(){
        rep = new RepositorioCategoriaImpl();
    }
    
    /**
     * Para função de inserir nova Categoria
     * Valida se nome categoria foi preenchido corretamente
     * @param c
     * @throws AllgemeinException
     */
    public void valida(Categoria cat) throws AllgemeinException{
        if(cat.getValido()!=null){
            throw new AllgemeinException("emptyfield",cat.getValido());
        }
        
        if(cat.getNomeCateg().trim().length()<3){
            throw new AllgemeinException("invalidvalue");
        }
    }
    
    /**
     * Para função de inserir nova Categoria
     * Verifica se registro já existe
     * Utiliza método self consulta()
     * @param c
     * @throws AllgemeinException
     */
    public void verificaRedundancia(Categoria cat) throws AllgemeinException{
        if(consulta(cat.getNomeCateg())!=null){
            throw new AllgemeinException("taken");
        }
    }
    
    /**
     * Para função de inserir nova Categoria
     * inclui registro categoria
     * @param c
     * @throws AllgemeinException
     */
    public void cadastra(Categoria cat) throws AllgemeinException{
        try{
            rep.inserir(cat);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database"); 
        }
    }
    
    /**
     * Verifica se categoria informado existe no BD
     * Auxilia a utilização de alguns dos demais métodos
     * @param c
     * @throws AllgemeinException
     */
    public void verificaExiste(Categoria cat) throws AllgemeinException{
        if(consulta(cat.getCodCateg())==null){
            throw new AllgemeinException("notfound");
        }
    }
    
    /**
     * Para função de consulta categoria
     * Varre registros e retorna categoria
     * @param nome
     * @return Categoria
     * @throws AllgemeinException
     */
    public Categoria consulta(String nome) throws AllgemeinException{
        Categoria cat;
        try{
            cat = rep.consultar(nome); 
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return cat;
    }
    
    /**
     * Para função de consulta categoria
     * Varre registros e retorna categoria
     * @param id
     * @return Cliente
     * @throws AllgemeinException
     */
    public Categoria consulta(int id) throws AllgemeinException{
        Categoria cat;
        try{
            cat = rep.consultar(id); 
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return cat;
    }
    
    /**
     * Para função de atualizar Categoria
     * @param cat
     * @throws AllgemeinException
     */
    public void altera(Categoria cat) throws AllgemeinException{
        try{
            rep.alterar(cat);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
    }
    
    /**
     * Para função de gerar lista de categoria
     * @return list
     * @throws AllgemeinException
     */
    public ArrayList<Categoria> lista() throws AllgemeinException{
        ArrayList<Categoria> list;
        try{
            list = rep.listar();
            
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return list;
    }
    
    /**
     * Para função excluir cadastro de categoria
     * @param c
     * @throws AllgemeinException
     */
    public void exclui(Categoria cat) throws AllgemeinException{
        try{
            rep.excluir(cat);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
    }
}
